package com.cms.recursoshumanos.json.object;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cms.recursoshumanos.cache.ListaReservacionCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.object.Ocio;
import com.cms.recursoshumanos.object.Reservacion;
import com.cms.recursoshumanos.object.TipoReservacion;
import com.cms.recursoshumanos.object.list.ListaReservacion;
import com.cms.recursoshumanos.utilities.Tool;


public class JsonObjectGetReservacion 
{

	private static JsonObjectGetReservacion _instance = null;
	public static JsonObjectGetReservacion getInstance() {
		if(_instance == null)
			_instance = new JsonObjectGetReservacion();
		
		return _instance;
	}
	public JsonObjectGetReservacion()
	{
	
	}
	private String Result;
	private static final String
	
			GETRESERVACIONES = "GETRESERVACIONES",
			GETRESERVACIONES_STATUS = "STATUS",
			GETRESERVACIONES_DATA = "DATA",
			GETRESERVACIONES_DATOS_RESERVACION = "DATOS_RESERVACION",
		
			GETRESERVACIONES_RESERVACION_ID = "reservaciones_id",
			GETRESERVACIONES_NUMERO_RESERVACION = "numero_reservaciones",
			GETRESERVACIONES_FECHA_SELEC_RESERVACION = "fecha_selec_reservacion",
			GETRESERVACIONES_FECHA_CREATE_RESERVACION = "fecha_create_reservacion",
			GETRESERVACIONES_HORA_INIC_RESERVACION = "hora_inic_reservaciones",
			GETRESERVACIONES_HORA_FIN_RESERVACION = "hora_fin_reservaciones",
			GETRESERVACIONES_DESCRIPCION_RESERVACION = "descripcion_reservaciones",
		
			GETRESERVACIONES_OCIO_ID = "ocio_id",
			GETRESERVACIONES_RIF_OCIO = "rif_ocio",
			GETRESERVACIONES_NOMBRE_OCIO = "nombre_ocio",
			GETRESERVACIONES_DESCRIPCION_OCIO = "descripcion_ocio",
			GETRESERVACIONES_HORARIO_INIC_OCIO = "horario_inic",
			GETRESERVACIONES_HORARIO_FIN_OCIO = "horario_fin",
			GETRESERVACIONES_FECHA_INIC_OCIO = "fecha_inic",
			GETRESERVACIONES_FECHA_FIN_OCIO = "fecha_fin",
			GETRESERVACIONES_STATUS_OCIO = "status_ocio",
			GETRESERVACIONES_NRO_TLF_OCIO_1 = "nro_tlf_ocio_1",
			GETRESERVACIONES_NRO_TLF_OCIO_2 = "nro_tlf_ocio_2",
			GETRESERVACIONES_EMAIL = "email_ocio",
					
		
			GETRESERVACIONES_TIPO_RESERVACION_ID = "tipo_reservaciones_id",
			GETRESERVACIONES_NOMBRE_TIPO_RESERVACION = "nombre_tipo_reservaciones",
			GETRESERVACIONES_DESCRIPCION_TIPO_RESERVACION = "descripcion_tipo_reservaciones";

	public void fromJSON (String jsonString) 
	{
		if (jsonString != null)
		{
			if (!jsonString.equals(""))
			{
				try
				{
					JSONObject jsonObject = new JSONObject(jsonString);
				
					if (jsonObject != null) 
					{
						
						JSONObject getReservacion = jsonObject.getJSONArray(GETRESERVACIONES).getJSONObject(0);
						String status = getReservacion.getString(GETRESERVACIONES_STATUS);
						
						Result = status;
						
						if (status.equals(Constant.CODE_OK))
						{
							
							JSONArray data = getReservacion.getJSONArray(GETRESERVACIONES_DATA);
							
							JSONObject objeto_data = data.getJSONObject(0);
							JSONArray datos_reservacion = objeto_data.getJSONArray(GETRESERVACIONES_DATOS_RESERVACION);
		
							ListaReservacion listado = new ListaReservacion();
							
							for (int i = 0; i < datos_reservacion.length(); i++ )
							{
								
									
									JSONObject json_reservacion = datos_reservacion.getJSONObject(i);
									
									
									listado.addReservacion(new Reservacion(Integer.parseInt(json_reservacion.getString(GETRESERVACIONES_RESERVACION_ID)),
																							Integer.parseInt(json_reservacion.getString(GETRESERVACIONES_NUMERO_RESERVACION)),
																							Tool.getInstance().parseStringToDate(json_reservacion.getString(GETRESERVACIONES_FECHA_SELEC_RESERVACION)),
																							Tool.getInstance().parseStringToDate(json_reservacion.getString(GETRESERVACIONES_FECHA_CREATE_RESERVACION)),
																							json_reservacion.getString(GETRESERVACIONES_HORA_INIC_RESERVACION),
																							(json_reservacion.getString(GETRESERVACIONES_HORA_FIN_RESERVACION).equals("null") ?
																									null:
																										json_reservacion.getString(GETRESERVACIONES_HORA_FIN_RESERVACION)),
																							(json_reservacion.getString(GETRESERVACIONES_DESCRIPCION_RESERVACION).equals("null") ?
																									null:
																										json_reservacion.getString(GETRESERVACIONES_DESCRIPCION_RESERVACION)),
																							new TipoReservacion(Integer.parseInt(json_reservacion.getString(GETRESERVACIONES_TIPO_RESERVACION_ID)), 
																												json_reservacion.getString(GETRESERVACIONES_NOMBRE_TIPO_RESERVACION), 
																												(json_reservacion.getString(GETRESERVACIONES_DESCRIPCION_TIPO_RESERVACION).equals("null") ?
																														null:
																														json_reservacion.getString(GETRESERVACIONES_DESCRIPCION_TIPO_RESERVACION))),
																							new Ocio(Integer.parseInt(json_reservacion.getString(GETRESERVACIONES_OCIO_ID)),
																									json_reservacion.getString(GETRESERVACIONES_NOMBRE_OCIO),
																									json_reservacion.getString(GETRESERVACIONES_RIF_OCIO),
																									json_reservacion.getString(GETRESERVACIONES_HORARIO_INIC_OCIO),
																									json_reservacion.getString(GETRESERVACIONES_HORARIO_FIN_OCIO),
																									json_reservacion.getString(GETRESERVACIONES_DESCRIPCION_OCIO),
																									Tool.getInstance().parseStringToDate(json_reservacion.getString(GETRESERVACIONES_FECHA_INIC_OCIO)),
																									Tool.getInstance().parseStringToDate(json_reservacion.getString(GETRESERVACIONES_FECHA_FIN_OCIO)),
																									json_reservacion.getBoolean(GETRESERVACIONES_STATUS_OCIO),
																									json_reservacion.getString(GETRESERVACIONES_NRO_TLF_OCIO_1),
																									(json_reservacion.getString(GETRESERVACIONES_NRO_TLF_OCIO_2).equals("null") ?
																											null:
																											json_reservacion.getString(GETRESERVACIONES_NRO_TLF_OCIO_2)),
																									null,
																									json_reservacion.getString(GETRESERVACIONES_EMAIL))
																						)
																		);
									
									
											
							}
							ListaReservacionCache.getInstance().setListaReservacion(listado);
							ListaReservacionCache.getInstance().setFechaCache();
		
						}
					}
				} 
				catch (JSONException ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
				catch (Exception ex)
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
			}
			else
			{
				Result = Constant.CODE_NOT_SERVER_RESPONSE;
			}
		}
		else
		{
			Result = Constant.CODE_NOT_SERVER_RESPONSE;
		}
	}

	public String getResult()
	{
		return Result;
	}
	
}



